const queryString = require('querystring'), // 解析参数
    ejs = require('ejs');
const book = require('./books')
const user = require('./users')
const history = require('./history')

function parseParams(url) {
    if (url.indexOf('?') === -1) {
        return {};
    } else {
        return queryString.parse(
            url.substr(url.indexOf('?') + 1) // 截取问号后面的参数字符串
        )
    }
}
// 解析请求发送的参数
function parseRequestParams(req, callback) {
    // 获取请求路径
    let url = req.url;
    const method = req.method.toUpperCase();// 获取请求方式
    
    if (method == 'GET') {
        // 将请求参数绑定到请求对象上
        req.params = parseParams(url);
        callback();
    } else if (method == 'POST') { // post参数获取
        let params = '';
        req.on('data', (chunk) => { // chunk 为客户端发送的数据
            params += chunk;
        });
        req.on('end', () => {
            params = queryString.parse(params);
            // 将请求参数绑定到请求对象上
            req.params = params;
            callback();
        })
    }
}
// 处理ejs模板引擎，并绑定渲染放到请求对象
function bindRender(req,res) {
    // 给request对象扩展一个方法
    req.renderTemplate = function(file,data){
        ejs.renderFile(__dirname+'/../templates/' + file,data, function (err, str) {
            if (err) {
                console.log(err)
                res.writeHead(500);
                res.end(err.message)
            }
            else {
                // 设置响应头
                res.writeHead(200,{
                    'Content-Type':'text/html;charset=utf-8'
                })
                // 输出对应的html
                res.end(str)
            }
        });
    }
}
module.exports = {
    /**
     * 处理(分发)请求到各个模块
     * @param {{url:String}} req 
     * @param {{write:Function,end:Function}} res 
     */
    process(req, res) {
        // 获取请求地址
        const url = req.url.toLowerCase();
        // 扩展响应对象
        bindRender(req,res);
        // 取出发送的参数
        parseRequestParams(req,function(){
            console.log('开始分发请求',url)
            // 将请求发送到具体的业务处理模块
            if(url == '/' || url.indexOf('/book') == 0){
                // 处理book模块
                book.process(req,res)
            }else if(url.indexOf('/user') == 0){
                // 处理user模块
                user.process(req,res)
            }else if(url.indexOf('/book') == 0){
                // 处理history模块
                history.process(req,res)
            }else{
                res.writeHead(404);
                res.end('模块不存在');
            }
        });

    }
}